package xyz.mumuwei.youthcourseserver.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.quartz.SchedulerException;
import xyz.mumuwei.youthcourseserver.common.dto.PageDto;
import xyz.mumuwei.youthcourseserver.common.lang.Result;
import xyz.mumuwei.youthcourseserver.pojo.StudentCourse;

/**
 * @author mumuwei
 * @since 2022-02-19
 */
public interface StudentCourseService extends IService<StudentCourse> {

    /**
     * 根据用户id和课程获取课时列表，包含用户预约状态
     * @param uid 用户账户id
     * @param courseId 课程id
     * @return 课时列表，包含预约情况
     */
    Result getClassTimeListByCourseId(Integer uid, Integer courseId);

    /**
     * 根据用户账户id和课时id预约课程
     * @param uid 用户账户id
     * @param classTimeId 课时id
     * @return 预约结果
     * @throws SchedulerException; 定时任务异常
     */
    Result reserveClassTime(Integer uid, Integer classTimeId) throws SchedulerException;

    /**
     * 根据用户账户id和课时id 取消预约课程
     * @param uid 用户账户id
     * @param classTimeId 课时id
     * @return 取消预约结果
     * @throws SchedulerException; 定时任务异常
     */
    Result unReserveClassTime(Integer uid, Integer classTimeId) throws SchedulerException;

    /**
     * 根据课程id和课时id获取预约课程课时学生列表(不分页)
     * @param courseId 课程id
     * @param classTimeId 课时id
     * @return 预约列表
     */
    Result getReserveListByCourseId(Integer courseId, Integer classTimeId);

    /**
     * 根据课程id和课时id获取预约课程课时学生列表(分页)
     * @param courseId 课程id
     * @param pageDto 分页信息和课时id
     * @return 预约列表
     */
    Result getReservePageByCourseId(Integer courseId, PageDto pageDto);
}
